ヘッダーをスキップ
Oracle TimesTen In-Memory Databaseオペレーション・ガイド
リリース6.0
B25767-02
  目次へ
目次
索引へ
索引

前へ
前へ
次へ
次へ
 

問合せオプティマイザ計画の参照および変更

組込みshowplanコマンドを使用すると、TimesTen Data Managerで問合せの実行に使用される問合せオプティマイザ計画が表示されます。また、ttIsqlには、この問合せオプティマイザ計画を変更するための組込み問合せオプティマイザ・ヒント・コマンドが用意されています。showplanコマンドを次に示す組込みコマンドと組み合せて使用すると、最適な実行計画を設計できます。TimesTenの問合せオプティマイザの詳細は、「TimesTen問合せオプティマイザ」および『Oracle TimesTen In-Memory Database C開発者およびリファレンス・ガイド』を参照してください。

例5.12
Command> CREATE TABLE T1 (A INTEGER); 
Command> CREATE TABLE T2 (B INTEGER); 
Command> CREATE TABLE T3 (C INTEGER); 
Command> 
Command> INSERT INTO T1 VALUES (3); 
1 row inserted. 
Command> INSERT INTO T2 VALUES (3); 
1 row inserted. 
Command> INSERT INTO T3 VALUES (3); 
1 row inserted. 
Command> INSERT INTO T1 VALUES (4); 
1 row inserted. 
Command> INSERT INTO T2 VALUES (5); 
1 row inserted. 
Command> INSERT INTO T3 VALUES (6); 
1 row inserted. 
Command> 
Command> autocommit 0; 
Command> showplan; 
Command> SELECT * FROM T1, T2, T3 WHERE A=B AND B=C AND A=B; 
Query Optimizer Plan: 
  STEP:        1 
  LEVEL:       3 
  OPERATION:   TblLkSerialScan 
  TBLNAME:     T1 
  IXNAME:      <NULL> 
  PRED:        <NULL> 
  OTHERPRED:   <NULL> 
  STEP:        2 
  LEVEL:       3 
  OPERATION:   TblLkSerialScan 
  TBLNAME:     T2 
  IXNAME:      <NULL> 
  PRED:        <NULL> 
  OTHERPRED:   T1.A = T2.B AND T1.A = T2.B 
  STEP:        3 
  LEVEL:       2 
  OPERATION:   NestedLoop 
  TBLNAME:     <NULL> 
  IXNAME:      <NULL> 
  PRED:        <NULL> 
  OTHERPRED:   <NULL> 
  STEP:        4 
  LEVEL:       2 
  OPERATION:   TblLkSerialScan 
  TBLNAME:     T3 
  IXNAME:      <NULL> 
  PRED:        <NULL> 
  OTHERPRED:   T2.B = T3.C 
  STEP:        5 
  LEVEL:       1 
  OPERATION:   NestedLoop 
  TBLNAME:     <NULL> 
  IXNAME:      <NULL> 
  PRED:        <NULL> 
  OTHERPRED:   <NULL> 
< 3, 3, 3 > 
1 row found. 
Command> trytbllocks 0; 
Command> tryserial 0; 
Command> SELECT * FROM T1, t2, t3 WHERE A=B AND B=C AND A=B; 
Query Optimizer Plan: 
  STEP:        1 
  LEVEL:       3 
  OPERATION:   TmpTtreeScan 
  TBLNAME:     T1 
  IXNAME:      <NULL> 
  PRED:        <NULL> 
  OTHERPRED:   <NULL> 
  STEP:        2 
  LEVEL:       3 
  OPERATION:   TmpTtreeScan 
  TBLNAME:     T2 
  IXNAME:      <NULL> 
  PRED:        T2.B >= T1.A 
  OTHERPRED:   <NULL> 
  STEP:        3 
  LEVEL:       2 
  OPERATION:   MergeJoin 
  TBLNAME:     <NULL> 
  IXNAME:      <NULL> 
  PRED:        T1.A = T2.B AND T1.A = T2.B 
  OTHERPRED:   <NULL> 
  STEP:        4 
  LEVEL:       2 
  OPERATION:   TmpTtreeScan 
  TBLNAME:     T3 
  IXNAME:      <NULL> 
  PRED:        <NULL> 
  OTHERPRED:   T2.B = T3.C 
  STEP:        5 
  LEVEL:       1 
  OPERATION:   NestedLoop 
  TBLNAME:     <NULL> 
  IXNAME:      <NULL> 
  PRED:        <NULL> 
  OTHERPRED:   <NULL> 
< 3, 3, 3 > 
1 row found. 
Command> 
 

この例では、3つの表に対して問合せが実行され、問合せオプティマイザの計画が表示されています。1つ目のバージョンの問合せでは、問合せオプティマイザのデフォルトの実行計画が使用されていますが、2つ目のバージョンでは、trytbllocksおよびtryserial組込みヒント・コマンドを使用して問合せオプティマイザの計画が変更されています。2つ目のバージョンの問合せでは、シリアル・スキャンおよびネステッド・ループ結合ではなく、一時索引スキャンおよびマージ結合が使用されています。

このように、showplanコマンドをttIsqlの組込み問合せオプティマイザ・ヒント・コマンドと組み合せて使用すると、アプリケーション要件を満たすために使用する実行計画を迅速に決定できます。